package com.wuzao.dataStructure.treeSetTest;

import javax.imageio.stream.IIOByteBuffer;
import java.util.TreeSet;

/**
 * TreeSet 特点：
 * 1、元素自动排序
 * 2、不允许重复
 * 3、添加、删除、查找 O(logn)
 * 4、基于红黑树实现，自动排序
 * 5、线程不安全
 */
public class TreeSetTest {
    public static void main(String[] args) {
        // 创建一个 TreeSet 对象
        TreeSet<Integer> treeSet = new TreeSet<>();

        // 添加元素
        treeSet.add(10);
        treeSet.add(5);
        treeSet.add(20);
        treeSet.add(15);
        System.out.println("TreeSet after adding elements: " + treeSet);

        // 尝试添加重复元素
        treeSet.add(10);
        System.out.println("TreeSet after adding duplicate element (10): " + treeSet);

        // 检查元素是否存在
        System.out.println("Does TreeSet contain 15? " + treeSet.contains(15));

        // 获取第一个和最后一个元素
        System.out.println("First element: " + treeSet.first());
        System.out.println("Last element: " + treeSet.last());

        // 删除元素
        treeSet.remove(15);
        System.out.println("TreeSet after removing element (15): " + treeSet);

        // 使用 higher() 和 lower() 方法
        System.out.println("Element higher than 10: " + treeSet.higher(10));
        System.out.println("Element lower than 10: " + treeSet.lower(10));

        // 大于或等于
        System.out.println("Element higher than or equal 10: " + treeSet.ceiling(10));
        // 小于等于
        System.out.println("Element lower than 10: " + treeSet.floor(10));

        // 使用 subSet() 方法获取范围子集
        System.out.println("Subset (5 to 20, inclusive): " + treeSet.subSet(5, true, 20, true));

        // 遍历 TreeSet
        System.out.println("Iterating through TreeSet:");
        for (Integer num : treeSet) {
            System.out.println(num);
        }
    }
}
